package com.example.bishe.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.PropertyNamingStrategy;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;

import java.util.List;

/**
 * JSON工具类
 *
 */
public class JsonUtils {

    /**
     * javaBean转Json对象
     *
     */
    public static JSONObject toJSON(Object obj) {
        if (obj == null) {
            return null;
        }
        return (JSONObject) JSON.toJSON(obj);

    }

    /**
     * json转javaBean
     *
     */
    public static <T> T toJavaObject(JSONObject json, Class<T> clazz) {
        if (json == null) {
            return null;
        }
        return JSON.toJavaObject(json, clazz);
    }

    /**
     * string转json
     *
     */
    public static JSONObject parse(String text) {
        if (StringUtils.isEmpty(text)) {
            return null;
        }
        return JSON.parseObject(text);
    }

    /**
     * json转string
     *
     */
    public static String toJSONString(Object obj) {
        if (obj == null) {
            return null;
        }

        return JSON.toJSONString(obj);
    }

    /**
     * json字符串转javaBean
     *
     */
    public static <T> T parseObject(String text, Class<T> clazz){
        return JSON.parseObject(text,clazz);
    }

    /**
     * string转JSONArray
     *
     */
    public static JSONArray parseArray(String text) {
        return JSON.parseArray(text);
    }

    /**
     * string转list
     *
     */
    public static <T> List<T> parseArray(String text, Class<T> clazz) {
        return JSON.parseArray(text, clazz);
    }

    /**
     * 驼峰转下划线
     *
     */
    public static String toJSONStringSnakeCase(Object obj) {
        // 反序列化配置对象
        SerializeConfig config = new SerializeConfig();
        config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
        if (obj == null) {
            return null;
        }
        return JSON.toJSONString(obj, config);
    }

    /**
     * 驼峰转下划线
     *
     */
    public static <T> T parseSnakeCase(String obj, Class<T> clzz) {
        // 反序列化配置对象
        SerializeConfig config = new SerializeConfig();
        config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
        if (obj == null) {
            return null;
        }
        return JSON.toJavaObject(parse(obj), clzz);
    }

}
